package com.cskaoyan.javase.oop2.encapsulate._1extends._5limit;

/**
 * 继承的限制
 * 子类通过继承父类,会得到父类的所有成员
 * 那么父类中的一些比较特殊的成员,都会被继承吗?
 *
 * 1.父类的私有成员(变量)能不能继承?
 *      实际上是可以继承的
 *      子类继承父类的所有成员,包含私有成员
 *      但是私有成员只有父类自身有访问权限
 *      子类是没有访问权限的
 *      可以通过一个Getter方法去访问它
 *
 *
 * 2.父类的静态成员能不能继承?
 *      不能继承
 *      看起来子类可以使用父类的静态成员
 *      但实际上,这是父子类共用了父类的静态成员
 *      是共用,不是继承
 *      我们谈的继承,是属于对象的成员变量/成员方法的继承
 *      不谈静态成员的继承
 *      它们也不是继承
 *
 *      牢牢记住,静态成员是属于类的
 *      定义在哪个类中,就属于哪个类,没有继承的概念
 *      最多就是给子类共用
 *
 *
 * 3.父类的构造器,能不能继承?
 *      不能
 *
 * 何时使用继承?
 * 不要盲目的去使用继承，尤其不要单纯为了复用代码，而使用继承。
 * 使用继承应该严格考虑两个类是否具有"is-a"关系！
 * 这种"is-a"的关系,可以根据生活经验判断,当然更重要的是要根据开发前的需求分析来决定
 * 因为很多业务比较复杂的场景下,是无法直接判断"is-a"的
 *
 * @since 10:56
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        // 'num' has private access in 'com.cskaoyan.javase.oop2.encapsulate._1extends._5limit.Father'. ';' expected.
        // s.num
        System.out.println(s.getNum());

        System.out.println(Father.staticNum);
        Father.staticNum = 888;
        System.out.println(Son.staticNum);

    }
}

class Father {
    private int num = 666;


    static int staticNum = 777;

    // num的Getter方法,该方法会被子类继承
    public int getNum() {
        return num;
    }
}

class Son extends Father {

}